/*
 * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 *
 */
package gchisto.gui.utils;

import gchisto.utils.errorchecking.ArgumentChecking;
import javax.swing.JPanel;

/**
 * A convenience class that associates a panel with a title. It is designed to
 * be used for charts that are included in tabbed panes. This way, the chart
 * title, needed when adding the chart to a tabbed pane, is immediately
 * available.cd
 *
 * @author Tony Printezis
 * @see    javax.swing.JPanel
 */
abstract public class AbstractChartPanel extends javax.swing.JPanel {
    
    /**
     * The title of the panel.
     */
    private String title;
    
    /**
     * The optional unit name of the data shown in the panel. If it is
     * <tt>null</tt>, the unit name is ignored.
     */
    private String unitName;
    
    /**
     * It returns the title of the panel which optionally has the unit name
     * as its suffix.
     *
     * @return The title of the panel.
     */
    public String getTitle() {
        return title + unitSuffix();
    }
    
    /**
     * It returns the optional suffix of the title, which includes the
     * unit name in round brackets. If the unitName name is <tt>null</tt>,
     * it returns an empty string.
     *
     * @return The title suffix, or an empty string if the unitName name
     * is <tt>null</tt>.
     */
    public String unitSuffix() {
        return (unitName != null) ? " (" + unitName + ")" : "";
    }
    
    /**
     * It returns the panel it which the chart should be added. The layout
     * of the panel is <tt>BorderLayout</tt>.
     *
     * @return The panel in which the chart should be added.
     *
     * @see java.awt.BorderLayout
     */
    protected JPanel mainPanel() {
        return mainPanel;
    }
    
    /**
     * It creates a new instance of the chart panel and associates with 
     * it the given title and no unit name.
     *
     * @param title The title to be associated with the new chart panel.
     */
    protected AbstractChartPanel(String title) {
        this(title, null);
    }
    
    /**
     * It creates a new instance of the chart panel and associates with
     * it the given title and unit name.
     *
     * @param title The title to be associated with the new chart panel.
     * @param unitName The unit name to be associated with the new chart panel.
     */
    protected AbstractChartPanel(String title, String unitName) {
        ArgumentChecking.notNull(title, "title");
        
        initComponents();
        
        this.title = title;
        this.unitName = unitName;
    }
    
    /**
     * Private constructor with no arguments so that it is not called.
     */
    private AbstractChartPanel() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        mainPanel = new javax.swing.JPanel();

        mainPanel.setLayout(new java.awt.BorderLayout());

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(mainPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(mainPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel mainPanel;
    // End of variables declaration//GEN-END:variables
    
}
